//package great.project.jpa.signle.table;
//
//import com.querydsl.core.group.GroupByBuilder;
//import com.querydsl.core.types.Projections;
//import com.querydsl.jpa.impl.JPAQueryFactory;
//import great.project.jpa.sign.table.SpringDataJpaSearchSingelTableDemo;
//import great.project.jpa.sign.table.domain.entity.QSysUser;
//import great.project.jpa.sign.table.domain.entity.SysUser;
//import great.project.jpa.sign.table.dto.UserDto;
//import lombok.SneakyThrows;
//import org.hamcrest.MatcherAssert;
//import org.hamcrest.core.Is;
//import org.hamcrest.core.IsNull;
//import org.junit.jupiter.api.Test;
//import org.springframework.boot.test.context.SpringBootTest;
//import org.springframework.data.domain.PageRequest;
//import org.springframework.data.domain.Pageable;
//import org.springframework.data.domain.Sort;
//
//import javax.annotation.Resource;
//import java.text.SimpleDateFormat;
//import java.util.List;
//import java.util.stream.Collectors;
//
//@SpringBootTest(classes = SpringDataJpaSearchSingelTableDemo.class)
//public class JpaQueryFactory {
//
//    @Resource
//    private JPAQueryFactory jPAQueryFactory;
//
//    QSysUser qSysUser = QSysUser.sysUser;
//
//    /**
//     * 时间条件 加上个数限制
//     */
//    @SneakyThrows
//    @Test
//    void t00() {
//        final List<SysUser> fetch = jPAQueryFactory.select(qSysUser).from(qSysUser)
//                .where(
//                        qSysUser.createTime
//                                .eq(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
//                                        .parse("2019-02-13 16:02:36"))
//                )
//                .limit(1)
//                .fetch();
//        MatcherAssert.assertThat(fetch, IsNull.notNullValue());
//        for (SysUser sysUser : fetch) {
//            MatcherAssert.assertThat(sysUser.getUsername(), Is.is("jeecg"));
//        }
//
//    }
//
//
//    /**
//     * 查询某个字段
//     */
//    @Test
//    void t01() {
//        final String id = jPAQueryFactory
//                .select(
//                        qSysUser.id
//                )
//                .from(qSysUser)
//                .orderBy(qSysUser.id.asc())
//                .fetchFirst();
//        MatcherAssert.assertThat(id, Is.is("3d464b4ea0d2491aab8a7bde74c57e95"));
//    }
//
//    /**
//     * mapping
//     */
//    @Test
//    void t02() {
//
//        GroupByBuilder<SysUser> builder = new GroupByBuilder<>(qSysUser);
//        builder.as(qSysUser.id);
//        builder.as(qSysUser.realname);
//
//        final List<UserDto> collect = jPAQueryFactory
//                .select(qSysUser.status, qSysUser.status.count())
//                .from(qSysUser)
//                .groupBy(qSysUser.status)
//                .fetch()
//                .stream()
//                .map(r -> UserDto.builder()
//                        .statusCount(r.get(qSysUser.status.count()))
//                        .status(r.get(qSysUser.status))
//                        .build())
//                .collect(Collectors.toList());
//
//        MatcherAssert.assertThat(collect, IsNull.notNullValue());
//        System.out.println(collect);
//
//    }
//
//    /**
//     * 结果映射
//     */
//    @Test
//    void t03() {
//        final List<UserDto> fetch = jPAQueryFactory
//                .select(Projections.bean(UserDto.class, qSysUser.status, qSysUser.status.count().as("statusCount")))
//                .from(qSysUser)
//                .groupBy(qSysUser.status)
//                .fetch();
//        MatcherAssert.assertThat(fetch, IsNull.notNullValue());
//        System.out.println(fetch);
//    }
//
//    /**
//     * 分页
//     */
//    @Test
//    void t04() {
//
//        Pageable pageable = PageRequest.of(1, 2);
//
//        final List<SysUser> fetch = jPAQueryFactory
//                .selectFrom(qSysUser)
//                .offset((long) (pageable.getPageNumber() - 1) * pageable.getPageSize())
//                .limit(pageable.getPageSize())
//                .fetch();
//        MatcherAssert.assertThat(fetch.size(), Is.is(2));
//
//
//    }
//
//    /**
//     * 多条件
//     */
//    @Test
//    void t05() {
//        final SysUser fetch = jPAQueryFactory
//                .selectFrom(qSysUser)
//                .where(
//                        qSysUser.username.eq("admin"),
//                        qSysUser.realname.eq("管理员")
//                )
//                .fetchOne();
//        MatcherAssert.assertThat(fetch, IsNull.notNullValue());
//        MatcherAssert.assertThat(fetch.getUsername(), Is.is("admin"));
//        MatcherAssert.assertThat(fetch.getRealname(), Is.is("管理员"));
//
//
//    }
//
//    /**
//     * 排序
//     */
//    @Test
//    void t06() {
//        final List<SysUser> fetch = jPAQueryFactory
//                .selectFrom(qSysUser)
//                .orderBy(qSysUser.id.asc())
//                .fetch();
//        MatcherAssert.assertThat(fetch, IsNull.notNullValue());
//        MatcherAssert.assertThat(fetch.get(0).getId(), Is.is("3d464b4ea0d2491aab8a7bde74c57e95"));
//    }
//
//}
